package factor;

public class Main {

	public static void main(String[] args) {
		
		factor(60009);
	}
	
	//输出参数的全部因数
	public static void factor(int a) { 
       //k为平方根，每个小于平方根的因数都有个对应大于平方根的因数
       int k= (int) Math.sqrt(a);
       for ( int i = 2 ; i <= k ; i++ ){
           //如果能被a整除，那肯定是a的因子，毫无疑问
           if ( a % i == 0 ){
               System.out.println(i);
               //重点的部分在这里！！！
               //当i能被a整除的情况下，此时i是相对较小的因子，用i求出a另一个较大的因子n
               //因为当i能被a整除时，那么数"a/i"也一定能被a整除
               //不需要再进行重复的计算，这样算法的运行时间大大降低
               int n = a / i;
               //但用i算出另一个较大的因子时，会出现重复的情况
               //例如a = 4,当遍历到2时，算出另一个较大的因子也是2，这就重复了，要判断一下
               if ( n != i ){    
            	   System.out.println(n);
               }
           }
       }
       //1和a自身也是因子，单独处理
       System.out.println(1);
       System.out.println(a);
    }
}
